x86/vmx: Properly flush the TLB when an altp2m is modified
authorAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 18 Mar 2019 16:02:49 +0000 (17:02 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 18 Mar 2019 16:02:49 +0000 (17:02 +0100)
commit935a4adb36af7e6e86dbc9462b8c7f56ddc3bc3a
tree6ab8f9dc48a33e4d9dff845efdce7855dcc773a0
parent833788f4d2db3ed40005c6c42d1a49166b750b6e
x86/vmx: Properly flush the TLB when an altp2m is modified

Modifications to an altp2m mark the p2m as needing flushing, but this was
never wired up in the return-to-guest path.  As a result, stale TLB entries
can remain after resuming the guest.

In practice, this manifests as a missing EPT_VIOLATION or #VE exception when
the guest subsequently accesses a page which has had its permissions reduced.

vmx_vmenter_helper() now has 11 p2ms to potentially invalidate, but issuing 11
INVEPT instructions isn't clever.  Instead, count how many contexts need
invalidating, and use INVEPT_ALL_CONTEXT if two or more are in need of
flushing.

This doesn't have an XSA because altp2m is not yet a security-supported
feature.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
master commit: 69f7643df68ef8e994221a996e336a47cbb7bbc8
master date: 2019-02-28 11:16:27 +0000
xen/arch/x86/hvm/vmx/vmx.c